<?php

    /**
     * This is the model class for table "{{expenses}}".
     *
     * The followings are the available columns in table '{{expenses}}':
     * @property integer $id
     * @property string $item
     * @property string $amount
     * @property integer $user_id
     * @property string $remark
     * @property string $createtime
     * @property integer $updateby_user_id
     * @property string $modifytime
     */
    class Expenses extends CActiveRecord {

        /**
         * @return string the associated database table name
         */
        public function tableName() {
            return '{{expenses}}';
        }

        /**
         * @return array validation rules for model attributes.
         */
        public function rules() {
            // NOTE: you should only define rules for those attributes that
            // will receive user inputs.
            return array(
                array('item, amount, user_id, on_date', 'required'),
                array('user_id, updateby_user_id', 'numerical', 'integerOnly' => true),
                array('item', 'length', 'max' => 500),
                array('amount', 'length', 'max' => 15),
                array('on_date', 'type', 'type' => 'datetime', 'message' => '{attribute}: is not a date!', 'dateFormat' => 'yyyy-mm-dd'),
                array('remark', 'length', 'max' => 255),
                array('modifytime, user.user_code, user.profile.firstname, user.profile.lastname', 'safe'),
                array('user_id', 'compare', 'operator' => '>', 'compareValue' => '0'),
                // The following rule is used by search().
                // @todo Please remove those attributes that should not be searched.
                array('id, item, amount, user_id, on_date, remark, createtime, updateby_user_id, modifytime, user.user_code, user.profile.firstname, user.profile.lastname', 'safe', 'on' => 'search'),
            );
        }

        /**
         * @return array relational rules.
         */
        public function relations() {
            // NOTE: you may need to adjust the relation name and the related
            // class name for the relations automatically generated below.
            return array(
                'user' => array(self::BELONGS_TO, 'User', 'user_id'),
            );
        }

        /**
         * @return array customized attribute labels (name=>label)
         */
        public function attributeLabels() {
            return array(
                'id' => 'ID',
                'item' => t('Item'),
                'amount' => t('Amount'),
                'user_id' => t('User ID'),
                'remark' => t('Remark'),
                'on_date' => t('Date'),
                'createtime' => t('Create Date'),
                'updateby_user_id' => t('Updated by User'),
                'modifytime' => t('Modify Date'),
            );
        }

        /**
         * Retrieves a list of models based on the current search/filter conditions.
         *
         * Typical usecase:
         * - Initialize the model fields with values from filter form.
         * - Execute this method to get CActiveDataProvider instance which will filter
         * models according to data in model fields.
         * - Pass data provider to CGridView, CListView or any similar widget.
         *
         * @return CActiveDataProvider the data provider that can return the models
         * based on the search/filter conditions.
         */
        public function search() {
            // @todo Please modify the following code to remove attributes that should not be searched.

            $criteria = new CDbCriteria;

            $criteria->compare('id', $this->id);
            $criteria->compare('item', $this->item, true);
            $criteria->compare('amount', $this->amount, true);
            $criteria->compare('user_id', $this->user_id);
            $criteria->compare('on_date', $this->on_date);
            $criteria->compare('remark', $this->remark, true);
            $criteria->compare('createtime', $this->createtime, true);
            $criteria->compare('updateby_user_id', $this->updateby_user_id);
            $criteria->compare('modifytime', $this->modifytime, true);
            $criteria->compare('user_code', $this->user_code, true);
            $criteria->compare('firstname', $this->user->profile->firstname, true);
            $criteria->compare('lastname', $this->user->profile->lastname, true);

            return new CActiveDataProvider($this, array(
                'criteria' => $criteria,
            ));
        }

        /**
         * Returns the static model of the specified AR class.
         * Please note that you should have this exact method in all your CActiveRecord descendants!
         * @param string $className active record class name.
         * @return Expenses the static model class
         */
        public static function model($className = __CLASS__) {
            return parent::model($className);
        }

    }

